﻿#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
using namespace std;
//const int N=10010;
//int arr[N];
//int main()
//{
//	int n,x;
//	cin>>n;
//	for(int i=0;i<n;i++)
//	{
//		cin>>arr[i];
//	}
//	cin>>x;
//	for(int i=0;i<=n;i++)
//	{
//		if(arr[i]==x)
//		{
//			cout<<i<<endl;
//			break;
//		}
//		else if(i==n)
//		{
//			printf("-1");break;
//		}
//	}
//	return 0;
//}
//const int N=101;
//int arr[N];
//int main()
//{
//   int n;
//   cin>>n;
//   for(int i=0;i<n;i++)
//   {
//   	cin>>arr[i];
//   }
//	for(int i=n-1;i>=0;i--)
//	{
//		printf("%d ",arr[i]);
//	}
//	return 0;
//}
//const int N1=1001;
//const int N2=1001;
//int arr1[N1];
//int arr2[N2]; 
//int main()
//{
//	int n,sum=0;
//	cin>>n;
//	for(int i=0;i<n;i++)
//	{
//		cin>>arr1[i];
//    }  	
//    	for(int i=0;i<n;i++)
//	{
//		cin>>arr2[i];
//    } 
//    	for(int i=0;i<n;i++)
//	{
//		sum+=arr1[i]*arr2[i];
//    } 
//    cout<<sum<<endl; 
//	return 0;
//}
//const int N=101;
//int arr[N];
//int main()
//{
//	int n=0;
//	float a=0,b=0,c=0,d=0;
//	cin>>n;
//	for(int i=0;i<n;i++)
//	{
//	 cin>>arr[i];
//	 if(arr[i]>=0&&arr[i]<=18)
//	 { 
//	 a++;
//	 }
//	 if(arr[i]>=19&&arr[i]<=35)
//	 {
//	 	b++;
//	 }
//	 if(arr[i]>=36&&arr[i]<=60)
//	 {
//	 	c++;
//	 }
//	 if(arr[i]>60)
//	 {
//	 	d++;
//	 }	
//	}
//	printf("%.2f%%\n%.2f%%\n%.2f%%\n%.2f%%\n",a/n*100.0,b/n*100.0,c/n*100.0,d/n*100.0);
//	return 0;
//}
//int arr[5010]={0};
//int main()
//{
//   int n; 
//   cin>>n;
//   for(int i=2;i<=n;i++)
//   {
//   	  for(int j=i;j<=n;j++)
//   	  {
//   	   if(j%i==0)
//   	   {
//		  	if(arr[j]==1)
//		  	    arr[j]=0;
//		  	else
//		  	    arr[j]=1;
//		  }
//		 }
//	} 
//	for(int i=1;i<=n;i++)
//	{
//		if(arr[i]==0)
//		printf("%d ",i);
//	}
//	return 0;
//}
//const int N=101;
//int arr[N];
//int arr2[N]={0};
//int main()
//{ 
//int n;
//cin>>n;
//for(int i=0;i<n;i++)
//{
//	cin>>arr[i];
//}
//for(int i=0;i<n;i++)
//{
//	for(int j=0;j<i;j++)
//	{
//		if(arr[j]<arr[i])
//		arr2[i]+=1; 
//	}
//	
//}
//for(int i=0;i<n;i++)
//{
//	cout<<arr2[i]<<" ";
//}
//   return 0;
//} 
//int main()
//{
//	char arr[10][10];
//	memset(arr,'y', sizeof(arr));
//	for (int i = 0; i < 10; i++)
//	{
//		for (int j = 0; j < 10; j++)
//		{
//			cout << arr[j][i] << " ";
//		}
//		cout << endl;
//	}
//	return 0;
//}
//int arr[25][25]={0};////杨辉三角
//int main()
//{
//	int n;
//	cin >> n;
//
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j <= i; j++)
//		{
//				arr[i][0]=1;
//				if (i == j)
//				arr[i][j] = 1;
//				if (i >= 2 && j >= 1)
//				{
//					arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
//				}
//				printf("%d ", arr[i][j]);			
//		}
//		printf("\n");
//	}	
//	return 0;
//}
//int arr[5][5] = { 0 };
//int main()
//{
//	int a, b;
//	for (int i = 0; i < 5; i++)
//	{
//		for (int j = 0; j < 5; j++)
//		{
//			cin >> arr[i][j];
//		}
//	}
//	cin >> a >> b;
//	for (int i = 0; i <5; i++)
//	{
//		int c = arr[a - 1][i];
//		arr[a - 1][i] = arr[b - 1][i];
//		arr[b - 1][i] = c;
//	}
//	for (int i = 0; i < 5; i++)
//	{
//		for (int j = 0; j < 5; j++)
//		{
//			cout<<arr[i][j]<<" ";
//		}
//		cout << endl;
//	}
//	return 0;
//}

//const int N = 101;//注意细节
//int arr1[N][N];
//int arr2[N][N];
//int main()
//{
//	int m, n;
//	cin >> m >> n;
//	double a = 0;
//	for (int i = 0; i < m; i++)
//	{
//		for (int j=0; j < n; j++)
//		{
//			cin >> arr1[i][j];
//		}
//	}
//	for (int i = 0; i < m; i++)
//	{
//		for (int j=0; j < n; j++)
//		{
//			cin >> arr2[i][j];
//			if (arr1[i][j] == arr2[i][j])
//			{
//				a++;
//			}
//		}		    
//	}	
//	printf("%.2lf", a/(m*n)*100.00);
//	return 0;
//}
//const int N = 101;
//int arr1[N][N];
//int arr2;
//int main()
//{
//	int m, n;
//	cin >> m >> n;
//	double a = 0;
//	for (int i = 0; i < m; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			cin >> arr1[i][j];
//		}
//	}
//	for (int i = 0; i < m; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			cin >> arr2;
//			if (arr1[i][j] == arr2)
//			{
//				a++;
//			}
//		}
//	}
//	printf("%.2lf", a / (m * n) * 100.00);
//	return 0;
//}
//const int  N = 100;
//int arr[N][N] = {0};
//int arr2;
//int main()
//{
//	int n, m;
//	cin >> n >> m;
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < m; j++)
//		{
//			cin >> arr[i][j];
//		} 
//	}
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < m; j++)
//		{
//			cin >> arr2;
//			arr[i][j] += arr2;
//		}
//	}
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < m; j++)
//		{
//			cout << arr[i][j] << " ";
//		}
//		cout << endl;
//	}
//	return 0;
//}
//int arr[100][100];
//int main()
//{
//	int m, n;
//	cin >> m >> n;
//	for (int i = 0; i < m; i++)
//	{
//		for (int j = 0; j < n; j++)
//			cin >> arr[i][j];
//	}
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < m; j++)
//		{
//			printf("%d ", arr[j][i]);
//		}
//		printf("\n");
//	}
//	return 0;
//}

//int main()////可以使用类似数组的思想，但是不用数组，或者使用变长数组。
//{
//	int m, n,  x, sum=0;
//	cin >> m >> n;
//	for (int i = 0; i < m; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			cin >> x;
//			if (i == 0 || i == m - 1 || j == 0 || j == n - 1)
//			{
//				sum += x;
//			}
//		}
//	}
//	cout <<sum;
//	return 0;
//}
const int N = 110;
int arr1[N][N];//旧数据
int arr2[N][N];//新数据
int n, m;
int main()
{
		cin >> n >> m;
		int i = 0;
		int j = 0;
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < m; j++)
			{
				cin >> arr1[i][j];
				arr2[i][j] = arr1[i][j];
			}
		}
		//计算
		for (i = 1; i < n - 1; i++)
		{
			for (j = 1; j < m - 1; j++)
			{
				//浮点是直接赋值给整型就是去掉了⼩数点后的数据
				//这⾥需要根据四舍五⼊的⽅式赋值给整数，所以需要特殊处理
				arr2[i][j] = (arr1[i][j] + arr1[i - 1][j] + arr1[i + 1][j] +
					arr1[i][j - 1]
					+ arr1[i][j + 1]) / 5.0 + 0.5;
			}
		}
		//输出
	
		for (i = 0; i < n; i++)
		{
			for (j = 0; j < m; j++)
			{
				cout << arr2[i][j] << " ";
			}
			cout << endl;
		}
  return 0;
}

